#include "consola.h"

int main()
{
	int socketCliente;
	char comando [50+1];
	NIPC paquete;
	char* bufferNIPC;
	key_t claveSem;
	int semConsolaPDD;


	claveSem=ftok("/bin/ls",76);
	if(claveSem == (key_t)-1){
		printf("NO SE PUDO CREAR LA CLAVE.");
	}
	else{
		semConsolaPDD=crearSem(claveSem);
	}

	socketCliente = mainSocketCliente();

	while (strncmp(comando,"exit",4) != 0){

			memset(comando,0,51);
			printf("ingrese comando a utilizar: ");
			memset(comando,0,50+1);
			gets(comando);
			fflush(stdin);
			if(strncmp(comando,"info",4) == 0) {
				cargarEstructura(&paquete,5,comando);
				bufferNIPC = malloc(sizeof(char)* paquete.payloadLength + sizeof(uint8_t) + sizeof(uint16_t) );
				serializar_NIPC(paquete,bufferNIPC);
				free(paquete.mensaje);  /*libero memoria para que no se acumule*/
				enviarNIPC(bufferNIPC,paquete.payloadLength+3,socketCliente);
				char buffer[1024];
				memset(buffer,0,1024);
				recibirDatos(buffer,socketCliente);
				memset(buffer,0,1024);


		}
			if(strncmp(comando,"clean ",6) == 0) {
				cargarEstructura(&paquete,6,comando);
				bufferNIPC = malloc(sizeof(char)* paquete.payloadLength + sizeof(uint8_t) + sizeof(uint16_t) );
				serializar_NIPC(paquete,bufferNIPC);
				free(paquete.mensaje);
				enviarNIPC(bufferNIPC,paquete.payloadLength+3,socketCliente);
				char buffer[1024];
				memset(buffer,0,1024);
				up(semConsolaPDD);
				recibirDatos(buffer,socketCliente);
				memset(buffer,0,1024);
			}
			if((strncmp(comando,"trace ",6) == 0) ) {
				int cantidadElementos=0;
				cargarEstructura(&paquete,7,comando);
				bufferNIPC = malloc(sizeof(char)* paquete.payloadLength + sizeof(uint8_t) + sizeof(uint16_t) );
				serializar_NIPC(paquete,bufferNIPC);
				free(paquete.mensaje);  /*libero memoria para que no se acumule*/
				enviarNIPC(bufferNIPC,paquete.payloadLength+3,socketCliente);
				cantidadElementos = calcularComponentesTrace(comando);
				char buffer[1024];
				uint8_t banderin = 9;
				int i=0;
				while(i!=cantidadElementos){
					uint8_t id =0;
					while(id !=banderin){
						memset(buffer,0,1024);
						id = recibirDatos(buffer,socketCliente);
						up(semConsolaPDD);
						memset(buffer,0,1024);
					}
					i++;
				}

			}
		}


		return 0;
}

int calcularComponentesTrace (char* c)
{
	char* vector[5+1] = {"-1","-1","-1","-1","-1","-1"};
	int i=0,j=0,cont=0;
	char* ptrTok;

	strtok(c," ");
	for(i=0;i<5;i++){
		ptrTok = strtok(NULL," ");
		if (ptrTok != NULL){
			vector[i] = ptrTok;
			if (isdigit(*vector[i]) != 0){
				cont++;
				j++;
			}
		else printf("se ha introducido un caracter no valido, "
		"no se tendra en cuenta en la evaluacion.\n");
		}
	}
return cont;
}
